App({
  onLaunch() {
    // 初始化
    this.initSystemInfo();
    
    // 检查版本更新
    this.checkUpdate();
  },
  
  onShow() {
    // 应用显示时执行
    // 延迟检查相机权限，确保页面已加载
    setTimeout(() => {
      this.checkCameraPermission();
    }, 2000);
  },
  
  onHide() {
    // 应用隐藏时执行
  },
  
  // 初始化系统信息
  initSystemInfo() {
    try {
      const deviceInfo = wx.getDeviceInfo ? wx.getDeviceInfo() : {};
      const windowInfo = wx.getWindowInfo ? wx.getWindowInfo() : {};
      const appBaseInfo = wx.getAppBaseInfo ? wx.getAppBaseInfo() : {};
      const appAuthorizeSetting = wx.getAppAuthorizeSetting ? wx.getAppAuthorizeSetting() : {};
      const systemInfo = {
        ...deviceInfo,
        ...windowInfo,
        ...appBaseInfo,
        appAuthorizeSetting
      };
      this.globalData.systemInfo = systemInfo;
    } catch (e) {
      // 兜底：旧版基础库下尝试使用已废弃 API，避免崩溃
      if (wx.getSystemInfo) {
        wx.getSystemInfo({
          success: (res) => {
            this.globalData.systemInfo = res;
          }
        });
      }
    }
  },
  
  // 检查更新
  checkUpdate() {
    if (wx.canIUse('getUpdateManager')) {
      const updateManager = wx.getUpdateManager();
      updateManager.onCheckForUpdate(function (res) {
        if (res.hasUpdate) {
          updateManager.onUpdateReady(function () {
            wx.showModal({
              title: '更新提示',
              content: '新版本已经准备好，是否重启应用？',
              success: function (res) {
                if (res.confirm) {
                  updateManager.applyUpdate();
                }
              }
            });
          });
        }
      });
    }
  },

  // 检查相机权限
  checkCameraPermission() {
    console.log('开始检查相机权限...')
    
    // 检查是否已经询问过权限
    const hasAskedPermission = wx.getStorageSync('hasAskedCameraPermission')
    
    if (hasAskedPermission) {
      console.log('已经询问过权限，跳过')
      return
    }
    
    wx.getSetting({
      success: (res) => {
        console.log('当前权限设置:', res.authSetting)
        
        // 检查相机权限状态
        const cameraPermission = res.authSetting['scope.camera']
        
        if (cameraPermission === undefined) {
          // 首次使用，显示权限说明弹窗
          console.log('首次使用，显示权限说明')
          this.showCameraPermissionDialog()
        } else if (cameraPermission === false) {
          // 用户之前拒绝了权限，询问是否重新授权
          console.log('权限被拒绝，显示重试弹窗')
          this.showCameraPermissionRetryDialog()
        } else {
          // 已经授权，记录状态
          console.log('相机权限已授权')
          wx.setStorageSync('hasAskedCameraPermission', true)
        }
      },
      fail: (err) => {
        console.error('获取权限设置失败:', err)
      }
    })
  },

  // 显示相机权限说明弹窗
  showCameraPermissionDialog() {
    console.log('显示相机权限说明弹窗')
    
    wx.showModal({
      title: '相机权限申请',
      content: '为了提供更好的AR扫描体验，我们需要访问您的相机权限。\n\n• 用于扫描产品二维码\n• 用于AR产品识别\n• 用于获取产品使用指引\n\n点击"立即授权"即可开始使用AR功能！',
      confirmText: '立即授权',
      cancelText: '稍后再说',
      success: (res) => {
        console.log('用户选择:', res.confirm ? '授权' : '拒绝')
        
        // 记录已经询问过权限
        wx.setStorageSync('hasAskedCameraPermission', true)
        
        if (res.confirm) {
          // 用户同意，申请相机权限
          this.requestCameraPermission()
        } else {
          // 用户拒绝，记录状态
          this.setCameraPermissionStatus('denied')
        }
      }
    })
  },

  // 显示相机权限重试弹窗
  showCameraPermissionRetryDialog() {
    console.log('显示相机权限重试弹窗')
    
    wx.showModal({
      title: '相机权限未开启',
      content: '检测到您之前拒绝了相机权限，但AR扫描功能需要相机权限才能正常使用。\n\n是否现在开启相机权限？',
      confirmText: '去开启',
      cancelText: '暂不开启',
      success: (res) => {
        console.log('重试弹窗用户选择:', res.confirm ? '去开启' : '暂不开启')
        
        // 记录已经询问过权限
        wx.setStorageSync('hasAskedCameraPermission', true)
        
        if (res.confirm) {
          // 用户同意，打开设置页面
          wx.openSetting({
            success: (settingRes) => {
              if (settingRes.authSetting['scope.camera']) {
                // 用户开启了权限
                this.setCameraPermissionStatus('granted')
                wx.showToast({
                  title: '权限开启成功',
                  icon: 'success'
                })
              } else {
                // 用户仍然拒绝
                this.setCameraPermissionStatus('denied')
              }
            }
          })
        } else {
          // 用户拒绝，记录状态
          this.setCameraPermissionStatus('denied')
        }
      }
    })
  },

  // 申请相机权限
  requestCameraPermission() {
    console.log('开始申请相机权限')
    
    wx.authorize({
      scope: 'scope.camera',
      success: () => {
        console.log('相机权限授权成功')
        this.setCameraPermissionStatus('granted')
        wx.showToast({
          title: '权限授权成功',
          icon: 'success'
        })
      },
      fail: () => {
        console.log('相机权限授权失败')
        this.setCameraPermissionStatus('denied')
        wx.showModal({
          title: '权限申请失败',
          content: '相机权限申请失败，您可以在设置中手动开启。\n\n开启后即可使用AR扫描功能。',
          confirmText: '去设置',
          cancelText: '知道了',
          success: (res) => {
            if (res.confirm) {
              wx.openSetting()
            }
          }
        })
      }
    })
  },

  // 设置相机权限状态
  setCameraPermissionStatus(status) {
    wx.setStorageSync('cameraPermissionStatus', status)
    this.globalData.cameraPermissionStatus = status
  },

  // 获取相机权限状态
  getCameraPermissionStatus() {
    const status = wx.getStorageSync('cameraPermissionStatus') || 'unknown'
    this.globalData.cameraPermissionStatus = status
    return status
  },

  // 重置权限询问状态（用于测试）
  resetCameraPermissionStatus() {
    wx.removeStorageSync('hasAskedCameraPermission')
    wx.removeStorageSync('cameraPermissionStatus')
    this.globalData.cameraPermissionStatus = 'unknown'
    console.log('权限询问状态已重置')
  },
  
  // 全局数据
  globalData: {
    userInfo: null,
    systemInfo: null,
    currentProduct: null,
    searchHistory: [],
    cameraPermissionStatus: 'unknown'
  },
  
  // 存储搜索历史
  saveSearchHistory(keyword) {
    if (!keyword) return;
    
    let history = this.globalData.searchHistory;
    // 去重
    history = history.filter(item => item !== keyword);
    // 添加到最前面
    history.unshift(keyword);
    // 限制最大长度为10
    if (history.length > 10) {
      history = history.slice(0, 10);
    }
    
    this.globalData.searchHistory = history;
    // 保存到本地存储
    wx.setStorageSync('searchHistory', history);
  },
  
  // 获取搜索历史
  getSearchHistory() {
    const history = wx.getStorageSync('searchHistory') || [];
    this.globalData.searchHistory = history;
    return history;
  }
});